home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / tex / td187src.lzh / MTGRAPHI.I < prev    next >
Text File  |  1991-06-08  |  31KB  |  1,068 lines

  1. (*##########################################################################
  2.                            M A G I C T E R M I N A L
  3.   ##########################################################################
  4.  
  5.   Emuliert ein VT52-Terminal in einem wählbaren Bildschirmbereich.
  6.  
  7.   ##########################################################################
  8.   V2.0  19.10.90  Peter Hellinger       Anpassung an neues MagicSys
  9.   V1.3  11.05.90  Peter Hellinger       GEM-Fonthandling eingebaut
  10.   V1.2  06.05.90  Peter Hellinger       Es werden jetzt alle Escapes unter-
  11.                                         stützt, auch die, die mehrere Para-
  12.                                         meter benötigen.
  13.   V1.1  04.05.90  Peter Hellinger       Wordwrapping wird jetzt unterstützt
  14.                                         Default ist jedoch immer WrapOff!
  15.   V1.0  29.04.90  Peter Hellinger       Implementation für TDI-Modula-2
  16.   ##########################################################################*)
  17.  
  18. IMPLEMENTATION MODULE mtTerminal;
  19.  
  20. (*------------------------------*)
  21. (*       COMPILERSWITCHES       *)
  22. (*------------------------------*)
  23. (*  TDI-Version:   DEAKTIVIERT  *)
  24. (*------------------------------*)
  25. (* V-  Overflow-Checks          *)
  26. (* R-  Range-Checks             *)
  27. (* S-  Stack-Check              *)
  28. (* N-  NIL-Checks               *)
  29. (* T-  TDI-Compiler vor 3.01    *)
  30. (* Q+  Branch statt Jumps       *)
  31. (*                              *)
  32. (*------------------------------*)
  33. (*  MM2-Version:     AKTIVIERT  *)
  34. (*------------------------------*)
  35. (*$R-   Range-Checks            *)
  36. (*$S-   Stack-Check             *)
  37. (*                              *)
  38. (*------------------------------*)
  39.  
  40.  
  41. FROM SYSTEM             IMPORT  ADDRESS, ADR;
  42. FROM Storage            IMPORT  ALLOCATE, DEALLOCATE;
  43. FROM MagicStrings          IMPORT  Assign, Append, Length;
  44. FROM mtConvert          IMPORT  CardToStr, IntToStr, LCardToStr,
  45.                                 LIntToStr, LRealToStr, RealToStr;
  46. FROM MagicVDI           IMPORT  VDIIntIn, VDIPtsIn, VDICall;
  47. FROM mtAppl             IMPORT  VDIHandle, MaxWidth, MaxHeight, Bitplanes, 
  48.                                 OpenWorkstation, CloseWorkstation,
  49.                                 FontCode, SelectFont, ScaleFont, 
  50.                                 Monospaced, FontInfo, LoadFonts,
  51.                                 MouseOn, MouseOff;
  52. FROM MagicSys           IMPORT  Nil, Null, Bit0, Bit1, Bit2, Bit3, Bit4, Bit5,
  53.                                 Bit6, Bit7, Bit8, Bit9, Bit10, Bit11, Bit12,
  54.                                 Bit13, Bit14, Bit15, LOC, Byte, ByteSet, sWORD,
  55.                                 sINTEGER, sCARDINAL, sBITSET, lWORD, lINTEGER,
  56.                                 lCARDINAL, lBITSET, CastToChar, CastToByte,
  57.                                 CastToByteset, CastToInt, CastToCard, CastToBitset,
  58.                                 CastToWord, CastToLInt, CastToLCard, CastToLBitset,
  59.                                 CastToLWord, CastToAddr;
  60. IMPORT  MagicBIOS, MagicDOS, MagicAES, MagicVDI;
  61.  
  62.  
  63.  
  64.  
  65. (*--------------------------------------------------------------------------*
  66.  *                      Zustandsflags des Terminals                         *
  67.  *--------------------------------------------------------------------------*)
  68.  
  69. CONST   cActive =       0;      (* Terminal aktiv (Vordergrund)             *)
  70.         cErase =        1;      (* Zeichen vorlöschen?                      *)
  71.         cCursor =       2;      (* Cursor ein?                              *)
  72.         cBlink =        3;      (* Cursor blinkend?                         *)
  73.         cWrap =         4;      (* Word-Wrapping                            *)
  74.         cEscape =       5;      (* Escape wurde ausgegeben                  *)
  75.         cEscYs =        6;      (* Escape Y: Spaltenwert wird erwartet      *)
  76.         cEscYz =        7;      (* Escape Y: Zeilenwert wird erwartet       *)
  77.         cEscb =         8;      (* Escape b: Vordergrundfarbe wird erwartet *)
  78.         cEscc =         9;      (* Escape c: Hintergrundfarbe wird erwartet *)
  79.         cBColor =      10;      (* Hintergrundfarbe beim Schreiben          *)
  80.         cRedraw =      11;      (* Redrawfeature eingeschaltet              *)
  81.         cFlag12 =      12;
  82.         cFlag13 =      13;
  83.         cFlag14 =      14;
  84.         cFlag15 =      15;
  85.  
  86. (*--------------------------------------------------------------------------*)
  87.  
  88. TYPE    TERMINAL =      POINTER TO TerminalTyp;
  89.         TerminalTyp =   RECORD
  90.                          x:       sINTEGER;  (* X-Koordinate                 *)
  91.                          y:       sINTEGER;  (* Y-Koordinate                 *)
  92.                          px:      sINTEGER;  (* X-Pixelpos des Cursor        *)
  93.                          py:      sINTEGER;  (* Y-Pixelpos des Cursors       *)
  94.                          mx:      sINTEGER;  (* Position rechter Rand        *)
  95.                          my:      sINTEGER;  (* Position linker Rand         *)
  96.                          lastCol: sINTEGER;  (* Pixelpos der letzten Spalte  *)
  97.                          lastLn:  sINTEGER;  (* Pixelpos der letzten Zeile   *)
  98.                          zBreite: sINTEGER;  (* Zeichenbreite                *)
  99.                          zHoehe:  sINTEGER;  (* Zeichenhöhe                  *)
  100.                          chwidth: sINTEGER;  (* Breite des Zeichens - 1      *)
  101.                          linehi:  sINTEGER;  (* Höhe der Bildschirmzeile - 1 *)
  102.                          pmx:     sINTEGER;  (* Cursor-Breite                *)
  103.                          pmy:     sINTEGER;  (* Cursor-Höhe                  *)
  104.                          sx:      sINTEGER;  (* *)
  105.                          sy:      sINTEGER;  (* *)
  106.                          xoff:    sINTEGER;  (* Offset für kursive Schrift   *)
  107.                          yoff:    sINTEGER;  (* für tiefgestellte Schrift    *)
  108.                          w:       sINTEGER;  (* Breite in Pixel              *)
  109.                          h:       sINTEGER;  (* Höhe in Pixel                *)
  110.                          sp:      sINTEGER;  (* Anzahl der Spalten           *)
  111.                          zl:      sINTEGER;  (* Anzahl der Zeilen            *)
  112.                          font:    sINTEGER;  (* Fontnummer                   *)
  113.                          size:    sINTEGER;  (* Fontgröße                    *)
  114.                          vColor:  sINTEGER;  (* Vordergrundfarbe (Text)      *)
  115.                          hColor:  sINTEGER;  (* Hintergrundfarbe             *)
  116.                          tab:     sINTEGER;  (* Tabweite                     *)
  117.                          effect:  Attribut; (* Texteffekte                  *)
  118.                          zustand: sBITSET;   (* Zustand des Terminals        *)
  119.                         END; (* TerminalTyp *)
  120.  
  121.  
  122. (*--------------------------------------------------------------------------*)
  123.  
  124. TYPE    tRect =         RECORD
  125.                          x, y, w, h: sINTEGER;
  126.                         END;
  127.  
  128. VAR     d, q:           MagicVDI.MFDB;
  129.         dPtr:           ADDRESS;
  130.         qPtr:           ADDRESS;
  131.  
  132. VAR     control7:       POINTER TO ADDRESS;
  133.         control9:       POINTER TO ADDRESS;
  134.  
  135. VAR     InversHandle:   sINTEGER;
  136.         NormalHandle:   sINTEGER;
  137.         TextHandle:     sINTEGER;
  138.  
  139. VAR     rect:           tRect; 
  140.         rect2:          tRect;
  141.  
  142. VAR     Half:           sINTEGER;  (* Höhe für Hoch/Tiefgestellt *)
  143.         Full:           sINTEGER;  (* Höhe für Normale Schrift   *)
  144.         Status:         sINTEGER;
  145.  
  146. VAR     MaxLines:       sINTEGER;  (* max. Anzahl Zeilen des Bildschirms     *)
  147.         MaxColumns:     sINTEGER;  (* max. Anzahl Spalten des Bildschirms    *)
  148.         MinX:           sINTEGER;  (* Ursprung des Bildschirms               *)
  149.         MinY:           sINTEGER;
  150.  
  151. VAR     GEMFonts:       BOOLEAN;  (* GEMFonts benutzen, default off *)
  152.  
  153. (*--------------------------------------------------------------------------*)
  154.  
  155.  
  156. VAR     conterm[0484H]: ByteSet;
  157.  
  158. PROCEDURE Glocke;
  159. CONST glocke = 2;
  160. VAR